package day08.synch;

/**
 * @Auther: sky
 * @Date: 2019/3/4 23:47
 * @Description:脏读：不同线程抢cpu资源时，A线程抢到锁后执行了程序，将值修改完后，而B线程过来读的时候其实读到的是被A修改过的数据
 * 换句话说其实脏读就是读到了被修改过的数据，数据库中是读到了被修改过还未提交的数据
 */
public class DirtyReading {

    public  String name="A";
    public  String pass="AA";

    synchronized  public void setValue(String name,String pass){
        try{
            this.name=name;
            Thread.sleep(5000);
            this.pass=pass;
            System.out.println("setValue:"+Thread.currentThread().getName()+",name="+name+",pass="+pass);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    //该方法如不加synchronized修饰则是不安全的，可以被任意调用，如果想解决该线程不安全就是需要加synchronized
    synchronized public void getValue(){
        System.out.println("getValue:"+Thread.currentThread().getName()+",name="+name+",pass="+pass);
    }

}
